package com.tuling.timer;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 定时任务
 * Timer，单线程执行任务，任务有可能相互阻塞
 *      schedule：任务执行超时，会导致后面的任务往后推移
 *      scheduleAtFixedRate：任务超时，可能导致下一个任务就会马上执行
 * 运行时异常会导致timer线程终止
 * 任务调度是基于绝对时间的，对系统时间敏感
 */
public class TimerTest {

    public static void main(String[] args) {
        Timer timer = new Timer();  // 任务启动
        for (int i = 0; i < 2; i++) {
            TimerTask task = new FooTimerTask("foo" + i);
            // timer.schedule(task, new Date(), 2000);     // 任务添加
            timer.scheduleAtFixedRate(task, new Date(), 2000);
        }
    }
}

class FooTimerTask extends TimerTask {
    private String name;

    public FooTimerTask(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        try {
            System.out.println("name：" + name + ", startTime：" + new Date());
            Thread.sleep(3000);
            System.out.println("name：" + name + ", endTime：" + new Date());
            // 线程池执行
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}